﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Windows.Forms;

namespace SinaWeiboPlugin
{
    static class Utility
    {
        public static Image DrawToImage(Panel panel)
        {
            //获得当前屏幕的大小
            Rectangle rect = new Rectangle();
            rect = Screen.GetWorkingArea(panel);
            //创建一个以当前屏幕为模板的图象
            using(Graphics g1 = panel.CreateGraphics())
            {
                Image MyImage = new Bitmap(panel.Width, panel.Height, g1);
                using(Graphics g2 = Graphics.FromImage(MyImage))
                {
                    //得到屏幕的DC
                    IntPtr dc1 = g1.GetHdc();
                    //得到Bitmap的DC
                    IntPtr dc2 = g2.GetHdc();
                    // 调用此API函数，实现屏幕捕获
                    BitBlt(dc2, 0, 0, rect.Width, rect.Height, dc1, 0, 0, 13369376);
                    g1.ReleaseHdc(dc1);
                    g2.ReleaseHdc(dc2);
                }
                return MyImage;
            }
        }

        public static Image DrawToImage(Panel panel, Rectangle snapRect)
        {
            //获得当前屏幕的大小
            Rectangle rect = new Rectangle();
            rect = Screen.GetWorkingArea(panel);
            //创建一个以当前屏幕为模板的图象
            using (Graphics g1 = panel.CreateGraphics())
            {
                Image MyImage = new Bitmap(snapRect.Width, snapRect.Height, g1);
                using (Graphics g2 = Graphics.FromImage(MyImage))
                {
                    //得到屏幕的DC
                    IntPtr dc1 = g1.GetHdc();
                    //得到Bitmap的DC
                    IntPtr dc2 = g2.GetHdc();
                    // 调用此API函数，实现屏幕捕获
                    BitBlt(dc2, 0, 0, rect.Width, rect.Height, dc1, snapRect.X, snapRect.Y, 13369376);
                    g1.ReleaseHdc(dc1);
                    g2.ReleaseHdc(dc2);
                }
                return MyImage;
            }
        }

        [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
        private static extern bool BitBlt(
        IntPtr hdcDest, // 目标 DC的句柄
        int nXDest,
        int nYDest,
        int nWidth,
        int nHeight,
        IntPtr hdcSrc, // 源DC的句柄
        int nXSrc,
        int nYSrc,
        System.Int32 dwRop // 光栅的处理数值
        );
    }
}
